Plot ATC 1st Classes

library(amphora)
#> Warning: replacing previous import 'magrittr::set_names' by 'purrr::set_names'
#> when loading 'chariot'
#> Warning: replacing previous import 'magrittr::extract' by 'tidyr::extract' when
#> loading 'chariot'
#> Warning: replacing previous import 'DatabaseConnector::connect' by
#> 'pg13::connect' when loading 'chariot'
library(tidyverse)
#> ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
#> ✓ ggplot2 3.3.2.9000     ✓ purrr   0.3.4     
#> ✓ tibble  3.0.4          ✓ dplyr   1.0.2     
#> ✓ tidyr   1.1.2          ✓ stringr 1.4.0     
#> ✓ readr   1.4.0          ✓ forcats 0.5.0
#> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
#> x dplyr::filter() masks stats::filter()
#> x dplyr::lag()    masks stats::lag()
conn <- pg13::local_connect()
#> Connecting using PostgreSQL driver
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21600001)
#> ✓ Valid Concept Id
#> [2020-12-20 01:36:01]    Connecting using PostgreSQL driver
#> [2020-12-20 01:36:01]    Loading Cache...
#> [2020-12-20 01:36:01]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21600001
#>                         
#> [2020-12-20 01:36:01]    Postgres connection closed
#> [2020-12-20 01:36:01]    Connecting using PostgreSQL driver
#> [2020-12-20 01:36:01]    Loading Cache...
#> [2020-12-20 01:36:01]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21600001
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:36:01]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21600959)
#> ✓ Valid Concept Id
#> [2020-12-20 01:37:03]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:03]    Loading Cache...
#> [2020-12-20 01:37:03]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21600959
#>                         
#> [2020-12-20 01:37:03]    Postgres connection closed
#> [2020-12-20 01:37:03]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:03]    Loading Cache...
#> [2020-12-20 01:37:03]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21600959
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:37:03]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21601237)
#> ✓ Valid Concept Id
#> [2020-12-20 01:37:05]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:05]    Loading Cache...
#> [2020-12-20 01:37:05]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21601237
#>                         
#> [2020-12-20 01:37:05]    Postgres connection closed
#> [2020-12-20 01:37:05]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:05]    Loading Cache...
#> [2020-12-20 01:37:05]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21601237
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:37:05]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21601386)
#> ✓ Valid Concept Id
#> [2020-12-20 01:37:35]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:35]    Loading Cache...
#> [2020-12-20 01:37:35]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21601386
#>                         
#> [2020-12-20 01:37:35]    Postgres connection closed
#> [2020-12-20 01:37:35]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:35]    Loading Cache...
#> [2020-12-20 01:37:35]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21601386
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:37:35]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21601907)
#> ✓ Valid Concept Id
#> [2020-12-20 01:37:37]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:37]    Loading Cache...
#> [2020-12-20 01:37:37]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21601907
#>                         
#> [2020-12-20 01:37:37]    Postgres connection closed
#> [2020-12-20 01:37:37]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:37]    Loading Cache...
#> [2020-12-20 01:37:37]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21601907
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:37:37]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21602359)
#> ✓ Valid Concept Id
#> [2020-12-20 01:37:50]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:50]    Loading Cache...
#> [2020-12-20 01:37:50]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21602359
#>                         
#> [2020-12-20 01:37:50]    Postgres connection closed
#> [2020-12-20 01:37:50]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:50]    Loading Cache...
#> [2020-12-20 01:37:50]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21602359
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:37:50]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21602681)
#> ✓ Valid Concept Id
#> [2020-12-20 01:37:53]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:53]    Loading Cache...
#> [2020-12-20 01:37:53]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21602681
#>                         
#> [2020-12-20 01:37:53]    Postgres connection closed
#> [2020-12-20 01:37:53]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:53]    Loading Cache...
#> [2020-12-20 01:37:53]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21602681
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:37:53]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21602795)
#> ✓ Valid Concept Id
#> [2020-12-20 01:37:54]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:54]    Loading Cache...
#> [2020-12-20 01:37:54]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21602795
#>                         
#> [2020-12-20 01:37:54]    Postgres connection closed
#> [2020-12-20 01:37:54]    Connecting using PostgreSQL driver
#> [2020-12-20 01:37:54]    Loading Cache...
#> [2020-12-20 01:37:54]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21602795
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:37:54]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21603550)
#> ✓ Valid Concept Id
#> [2020-12-20 01:38:02]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:02]    Loading Cache...
#> [2020-12-20 01:38:02]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21603550
#>                         
#> [2020-12-20 01:38:02]    Postgres connection closed
#> [2020-12-20 01:38:02]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:02]    Loading Cache...
#> [2020-12-20 01:38:02]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21603550
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:38:02]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21603931)
#> ✓ Valid Concept Id
#> [2020-12-20 01:38:04]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:04]    Loading Cache...
#> [2020-12-20 01:38:04]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21603931
#>                         
#> [2020-12-20 01:38:04]    Postgres connection closed
#> [2020-12-20 01:38:04]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:04]    Loading Cache...
#> [2020-12-20 01:38:04]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21603931
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:38:04]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21604180)
#> ✓ Valid Concept Id
#> [2020-12-20 01:38:06]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:06]    Loading Cache...
#> [2020-12-20 01:38:06]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21604180
#>                         
#> [2020-12-20 01:38:06]    Postgres connection closed
#> [2020-12-20 01:38:06]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:06]    Loading Cache...
#> [2020-12-20 01:38:06]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21604180
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:38:06]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21604847)
#> ✓ Valid Concept Id
#> [2020-12-20 01:38:17]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:17]    Loading Cache...
#> [2020-12-20 01:38:17]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21604847
#>                         
#> [2020-12-20 01:38:17]    Postgres connection closed
#> [2020-12-20 01:38:17]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:17]    Loading Cache...
#> [2020-12-20 01:38:17]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21604847
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:38:17]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21605007)
#> ✓ Valid Concept Id
#> [2020-12-20 01:38:17]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:17]    Loading Cache...
#> [2020-12-20 01:38:17]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21605007
#>                         
#> [2020-12-20 01:38:17]    Postgres connection closed
#> [2020-12-20 01:38:17]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:17]    Loading Cache...
#> [2020-12-20 01:38:17]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21605007
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:38:17]    Postgres connection closed
 plot_atc_1st_class(conn = conn, vocab_schema = 'omop_vocabulary', atc_1st_concept = 21605212)
#> ✓ Valid Concept Id
#> [2020-12-20 01:38:20]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:20]    Loading Cache...
#> [2020-12-20 01:38:20]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                         )
#> 
#>                         SELECT
#>                                 ca.max_levels_of_separation AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 a2.concept_id AS descendant_concept_id,
#>                                 a2.concept_name AS descendant_concept_name,
#>                                 a2.domain_id AS descendant_domain_id,
#>                                 a2.vocabulary_id AS descendant_vocabulary_id,
#>                                 a2.concept_class_id AS descendant_concept_class_id,
#>                                 a2.standard_concept AS descendant_standard_concept,
#>                                 a2.concept_code AS descendant_concept_code,
#>                                 a2.valid_start_date AS descendant_valid_start_date,
#>                                 a2.valid_end_date AS descendant_valid_end_date,
#>                                 a2.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN atc a2
#>                         ON a2.concept_id = ca.descendant_concept_id
#>                         WHERE atc.concept_class_id = 'ATC 1st'
#>                                 AND atc.concept_id = 21605212
#>                         
#> [2020-12-20 01:38:20]    Postgres connection closed
#> [2020-12-20 01:38:20]    Connecting using PostgreSQL driver
#> [2020-12-20 01:38:20]    Loading Cache...
#> [2020-12-20 01:38:20]    Cached SQL: 
#>                         WITH atc AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id = 'ATC'
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.standard_concept = 'C'
#>                                         AND c.concept_class_id = 'ATC 1st'
#>                                         AND c.concept_id = 21605212
#>                         ),
#>                         rxnorm AS (
#>                                 SELECT *
#>                                 FROM omop_vocabulary.concept c
#>                                 WHERE c.vocabulary_id IN ('RxNorm', 'RxNorm Extension')
#>                                         AND c.invalid_reason IS NULL
#>                                         AND c.concept_class_id = 'Ingredient'
#>                         )
#> 
#>                         SELECT
#>                                 5 AS level_of_separation,
#>                                 atc.concept_id AS ancestor_concept_id,
#>                                 atc.concept_name AS ancestor_concept_name,
#>                                 atc.domain_id AS ancestor_domain_id,
#>                                 atc.vocabulary_id AS ancestor_vocabulary_id,
#>                                 atc.concept_class_id AS ancestor_concept_class_id,
#>                                 atc.standard_concept AS ancestor_standard_concept,
#>                                 atc.concept_code AS ancestor_concept_code,
#>                                 atc.valid_start_date AS ancestor_valid_start_date,
#>                                 atc.valid_end_date AS ancestor_valid_end_date,
#>                                 atc.invalid_reason AS ancestor_invalid_reason,
#>                                 rx.concept_id AS descendant_concept_id,
#>                                 rx.concept_name AS descendant_concept_name,
#>                                 rx.domain_id AS descendant_domain_id,
#>                                 rx.vocabulary_id AS descendant_vocabulary_id,
#>                                 rx.concept_class_id AS descendant_concept_class_id,
#>                                 rx.standard_concept AS descendant_standard_concept,
#>                                 rx.concept_code AS descendant_concept_code,
#>                                 rx.valid_start_date AS descendant_valid_start_date,
#>                                 rx.valid_end_date AS descendant_valid_end_date,
#>                                 rx.invalid_reason AS descendant_invalid_reason
#>                         FROM omop_vocabulary.concept_ancestor ca
#>                         INNER JOIN atc
#>                         ON atc.concept_id = ca.ancestor_concept_id
#>                         INNER JOIN rxnorm rx
#>                         ON rx.concept_id = ca.descendant_concept_id
#>                         
#> [2020-12-20 01:38:20]    Postgres connection closed
pg13::dc(conn = conn)
#> [2020-12-20 01:38:34]    Postgres connection closed